#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
#include <sstream>
#include <memory>


int main()
{
    // 测试序列化
    // Json::Value root;
    // root["name"] = "张三";
    // root["sex"] = "男";
    // root["age"] = 18;

    // Json::StreamWriterBuilder sbuilder; // StreamWriter的工厂
    // std::unique_ptr<Json::StreamWriter> writer(sbuilder.newStreamWriter()); // 用StreamWriterBuilder new一个StreamWriter
    // std::stringstream ss;
    // writer->write(root, &ss); // 把Json::Value转换成stringstream流(序列化)
    // std::cout << ss.str() << std::endl;

    // Json::Value sub;
    // sub["tel"] = "123";
    // sub["籍贯"] = "XXX";
    // root["info"] = sub;
    // std::string s = root.toStyledString();
    // std::cout << s << std::endl;

    // Json::FastWriter writer; // 去掉换行符，网络传送的数据量小
    // Json::StyledWriter writer;  // 设置了/n, 可读性比较好
    // std::string s = writer.write(root);
    // std::cout << s << std::endl;


    ////////////////////////////////////////////////////////////////////////////////
    // 测试反序列化
    // std::string json_string = "{\"name\":\"张三\", \"age\":30, \"city\":\"北京\"}";
    // // 起手式Json::Value
    // Json::Value root;
    // Json::Reader reader;
  
    // // 把序列化的字符串，反序列化到Json::Value中
    // bool ok = reader.parse(json_string, root);
    // (void)ok;
  
    // // 提取
    // std::string name = root["name"].asString();
    // int age = root["age"].asInt();
    // std::string city = root["city"].asString();
    // std::cout << name << std::endl;
    // std::cout << age << std::endl;
    // std::cout << city << std::endl;


    return 0;
}